#pragma warning(disable:4996)
#pragma warning(disable:6031)

#include <stdio.h>
#include <stdlib.h>

struct m
{
	int a;
	char c[20];
};

int cmp_int(const void* p1,const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int cmp_m(const void* p1, const void* p2)
{
	return strcmp(((struct m*)p1)->c, ((struct m*)p2)->c);
}

int main()
{
	int arr[10] = { 4,5,7,9,1,3,6,2,8,0 };
	struct m a[3] = { {2,"bcd"},{1,"abcd"},{3,"abc"} };
	int sz1 = sizeof(arr) / sizeof(arr[0]);
	int sz2 = sizeof(a) / sizeof(a[0]);
	qsort(arr, sz1, sizeof(int), cmp_int);
	for (int i = 0; i < sz1; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	qsort(a, sz2, sizeof(struct m), cmp_m);
	for(int i=0;i<sz2;i++)
	{
		printf("%d %s\n", a[i].a, a[i].c);
	}
	return 0;
}


//#include <stdlib.h>
//#include <assert.h>

//typedef struct SlistNode
//{
//	int data;
//	struct SlistNode* next;
//}SlistNode;
//
//void Print(SlistNode* phead)
//{
//	SlistNode* ptr = phead;
//	while (ptr != NULL)
//	{
//		printf("%d ", ptr->data);
//		ptr = ptr->next;
//	}
//}
//
//SlistNode* BuySlistNode(int data)
//{
//	SlistNode* newnode = (SlistNode*)malloc(sizeof(SlistNode));
//	if (newnode == NULL)
//	{
//		perror("malloc");
//		exit(-1);
//	}
//	newnode->data = data;
//	newnode->next = NULL;
//	return newnode;
//}
//
//void PushLast(SlistNode** pphead, int data)
//{
//	SlistNode* newnode = BuySlistNode(data);
//	if (*pphead == NULL)
//	{
//		*pphead = newnode;
//	}
//	else
//	{
//		SlistNode* ptr = *pphead;
//		while (ptr->next != NULL)
//		{
//			ptr = ptr->next;
//		}
//		ptr->next = newnode;
//	}
//}
//
//void PushFrant(SlistNode** pphead, int data)
//{
//	SlistNode* newnode = BuySlistNode(data);
//	newnode->next = *pphead;
//	*pphead = newnode;
//}
//
//void PopLast(SlistNode** pphead)
//{
//	assert(*pphead != NULL);
//	SlistNode* ptr = *pphead;
//	if ((*pphead)->next == NULL)
//	{
//		free(*pphead);
//		*pphead = NULL;
//	}
//	else
//	{
//		while (ptr->next->next != NULL)
//		{
//			ptr = ptr->next;
//		}
//		free(ptr->next);
//		ptr->next = NULL;
//	}
//}
//
//void PopFrant(SlistNode** pphead)
//{
//	assert(*pphead != NULL);
//	SlistNode* ptr = (*pphead)->next;
//	free(*pphead);
//	*pphead = ptr;
//}
//
//SlistNode* Find(SlistNode* phead, int data)
//{
//	SlistNode* ptr = phead;
//	while (ptr != NULL)
//	{
//		if (ptr->data == data)
//		{
//			return ptr;
//		}
//		ptr = ptr->next;
//	}
//	return NULL;
//}
//
//void Alter(SlistNode* phead, int a, int b)
//{
//	SlistNode* pos = Find(phead, a);
//	assert(pos != NULL);
//	pos->data = b;
//}
//
//void InsertBefore(SlistNode** pphead, int data)
//{
//	SlistNode* pos = Find(*pphead, data);
//	assert(pos != NULL);
//	SlistNode* newnode = BuySlistNode(data);
//	if (pos == *pphead)
//	{
//		newnode->next = *pphead;
//		*pphead = newnode;
//	}
//	else
//	{
//		SlistNode* prev = *pphead;
//		while (prev->next != pos)
//		{
//			prev = prev->next;
//		}
//		newnode->next = pos;
//		prev->next = newnode;
//	}
//}
//
//void InsertAfter(SlistNode* phead, int data)
//{
//	SlistNode* pos = Find(phead, data);
//	assert(pos != NULL);
//	SlistNode* newnode = BuySlistNode(data);
//	newnode->next = pos->next;
//	pos->next = newnode;
//}
//
//void Erase(SlistNode** pphead, int data)
//{
//	SlistNode* pos = Find(*pphead, data);
//	assert(pos != NULL);
//	if (pos == *pphead)
//	{
//		*pphead = pos->next;
//		free(pos);
//	}
//	else
//	{
//		SlistNode* prev = *pphead;
//		while (prev->next != pos)
//		{
//			prev = prev->next;
//		}
//		prev->next = pos->next;
//		free(pos);
//	}
//	pos = NULL;
//}
//
//void Destroy(SlistNode** pphead)
//{
//	assert(*pphead != NULL);
//	SlistNode* ptr = *pphead;
//	while (ptr != NULL)
//	{
//		SlistNode* next = ptr->next;
//		free(ptr);
//		ptr = next;
//	}
//	*pphead = NULL;
//}
//
//int main()
//{
//	SlistNode* a = NULL;
//	return 0;
//}